package generictype;

//                ↓ 类型变量，可以指定【方法的返回类型】以及【域和局部变量的类型】
public class Pair<T> {

	private T first;
	private T second;

	public Pair() {
		first = null;
		second = null;
	}

	public Pair(T first, T second) {
		this.first = first;
		this.second = second;
	}

	public T getFirst() {
		return first;
	}

	public T getSecond() {
		return second;
	}

	public void setFirst(T newValue) {
		first = newValue;
	}

	public void setSecond(T newValue) {
		second = newValue;
	}
}

class ArrayAlg {
	public static Pair<String> minmax(String[] a) {
		if (a == null || a.length == 0)
			return null;

		String min = a[0];
		String max = a[0];
		for (int i = 1; i < a.length; i++) {
			if (min.compareTo(a[i]) > 0)
				min = a[i];
			if (max.compareTo(a[i]) < 0)
				max = a[i];
		}
		return new Pair<String>(min, max);
	}

	/**
	 * 普通类中的泛型方法
	 * 功能:
	 * @author 林可  2010-6-8 下午03:19:48
	 * @param <T>
	 * @param a
	 * @return
	 */
	public static <T> T getMiddle(T[] a) {
		//                 ↑类型变量，放在修饰符之后，返回类型之前
		return a[a.length / 2];
	}
}
